package com.swak.job;

import java.time.LocalDateTime;
import java.util.List;

import com.swak.entity.Page;
import com.swak.entity.Parameters;
import com.swak.job.domain.JobDTO;
import com.swak.job.domain.JobDispatchDTO;
import com.swak.job.domain.JobEventDTO;
import com.swak.job.domain.JobFailDTO;
import com.swak.job.domain.JobTaskDTO;
import com.swak.registry.URL;

/**
 * 任务管理
 * 
 * @author 618lf
 */
public interface JobManager {

	/**
	 * 查询任务分发
	 * 
	 * @return
	 */
	List<URL> queryDispatchers(String jobId);

	/**
	 * 查询任务执行
	 * 
	 * @return
	 */
	List<URL> queryExecuters(String jobId);

	/**
	 * 调度Job
	 * 
	 * @param event
	 * @return
	 */
	Boolean dispatch(JobEventDTO event);

	/**
	 * 调度Job
	 * 
	 * @param jobId
	 * @return
	 */
	Boolean dispatch(String jobId);

	/**
	 * 调度Job: 立即执行
	 * 
	 * @param event
	 * @return
	 */
	Boolean dispatch(String jobId, String config);

	/**
	 * 调度Job： 延迟执行
	 * 
	 * @param event
	 * @return
	 */
	Boolean dispatch(String jobId, String config, LocalDateTime delayTime);

	/**
	 * 查询定时任务
	 * 
	 * @param query
	 * @param param
	 * @return
	 */
	Page<JobDTO> jobPage(JobDTO query, Parameters param);

	/**
	 * 查询定时任务 - 分发
	 * 
	 * @param query
	 * @param param
	 * @return
	 */
	Page<JobDispatchDTO> dispatchPage(JobDispatchDTO query, Parameters param);

	/**
	 * 查询定时任务 - 执行
	 * 
	 * @param query
	 * @param param
	 * @return
	 */
	Page<JobTaskDTO> taskPage(JobTaskDTO query, Parameters param);

	/**
	 * 查询定时任务 - 失败
	 * 
	 * @param query
	 * @param param
	 * @return
	 */
	Page<JobFailDTO> failPage(JobFailDTO query, Parameters param);

	/**
	 * 查询事件任务
	 * 
	 * @param query
	 * @param param
	 * @return
	 */
	Page<JobEventDTO> eventPage(JobEventDTO query, Parameters param);
}